package competition.chinaUnionPay;


import java.util.ArrayList;
import java.util.List;

/**
 * @author 郭辉
 * @className 银联-01. 回文链表
 * @description 银联-01. 回文链表
 * 银联-01. 回文链表
 * 通过的用户数547
 * 尝试过的用户数657
 * 用户总通过次数562
 * 用户总提交次数1336
 * 题目难度Easy
 * 给定一个链表的头结点 head，判断链表删除一个节点后是否可以成为「回文链表」。
 * 若可以，则返回 true；否则返回 false
 *
 * 注意：
 *
 * 输入用例均保证链表长度 大于等于 3
 * 示例 1：
 *
 * 输入：head = [1,2,2,3,1]
 *
 * 输出：true
 *
 * 解释：如下图所示，蓝色结点为删除的结点
 * 删除该节点后，链表为「回文链表」 [1,2,2,1]，返回 true
 * image.png
 *
 * 示例 2：
 *
 * 输入：head = [5,1,8,8,1,5]
 *
 * 输出：true
 *
 * 解释： 删除节点值为 8 的节点
 *
 * 示例 3：
 *
 * 输入：head = [1,2,3,4]
 *
 * 输出：false
 *
 * 提示：
 *
 * 链表中节点数目在范围 [3, 10^5]
 * 0 <= Node.val <= 10
 *
 * @date 2022/3/28 10:38
 * @company 海康威视
 * @since 1.0.0
 */
public class PalindromicLinkedList {
    public boolean isPalindrome(ListNode head) {
        ListNode pam = head;
        List<Integer> list = new ArrayList<>();
        list.add(pam.val);
        while(pam.next != null){
            list.add(pam.next.val);
            pam = pam.next;
        }
        for (int i = 0; i < list.size(); i++) {
            List<Integer> check = new ArrayList<>();
            check.addAll(list);
            check.remove(i);
            if (check(check)){
                return true;
            }
        }
        return false;
    }

    //检测是不是回文数字
    public boolean check(List<Integer> param){
        for (int i = 0; i < param.size()/2 ; i++) {
            if (param.get(i) == param.get(param.size()-1-i)){
                continue;
            }else {
                return false;
            }
        }
        return true;
    }

    public static void main(String[] args) {
        ListNode node0 = new ListNode(1);
        ListNode node1 = new ListNode(2);
        ListNode node2 = new ListNode(2);
//        ListNode node3 = new ListNode(3);
        ListNode node4 = new ListNode(1);
        node0.next=node1;
        node1.next=node2;
//        node2.next=node3;
        node2.next=node4;
        PalindromicLinkedList p = new PalindromicLinkedList();
        boolean palindrome = p.isPalindrome(node0);
        System.out.println(palindrome);
    }
}
